import Vue from 'vue'
// 引入字典接口（需确保接口路径与你的项目一致）
import { get as getDictDetail } from '@/api/system/dictDetail'

export default class Dict {
  constructor(dict) {
    // 接收组件的 dict 数据对象（用于存储字典数据）
    this.dict = dict
  }

  /**
   * 初始化字典
   * @param {Array} names - 字典名称数组（如 ['user_status', 'order_type']）
   * @param {Function} completeCallback - 初始化完成回调
   */
  async init(names, completeCallback) {
    if (!names || !Array.isArray(names) || names.length === 0) {
      throw new Error('字典初始化失败：需传入有效的字典名称数组（如 ["dict1", "dict2"]）')
    }

    // 收集所有字典接口请求 Promise
    const requestList = []
    names.forEach(dictName => {
      // 初始化字典存储结构（避免响应式丢失）
      Vue.set(this.dict.dict, dictName, {}) // 存储完整字典对象（key: 字典值, value: 完整字典项）
      Vue.set(this.dict.text, dictName, {}) // 存储「值-text」映射（原label改为text）
      Vue.set(this.dict, dictName, []) // 存储字典数组（格式：[{text: XXX, value: XXX}, ...]）

      // 发起接口请求，存储 Promise
      const request = getDictDetail(dictName)
        .then(response => {
          // 假设接口返回格式为 { content: [{ value: '1', label: '启用' }, ...] }
          const dictData = response.content || []
          
          // 转换数据格式：将label字段替换为text，生成新数组
          const formattedData = dictData.map(item => ({
            value: item.value,       // 保留原value字段
            text: item.label,        // 将原label字段值赋给text字段
            ...item                  // 保留其他可能存在的字段（如disabled、color等）
          }))

          // 填充字典数组（清空原有数据后添加格式化后的新数据）
          this.dict[dictName].splice(0, this.dict[dictName].length, ...formattedData)
          
          // 填充「值-对象」「值-text」映射（原label改为text）
          formattedData.forEach(item => {
            Vue.set(this.dict.dict[dictName], item.value, item)
            Vue.set(this.dict.text[dictName], item.value, item.text) // 映射值到text
          })
        })
        .catch(error => {
          console.error(`字典 ${dictName} 初始化失败：`, error)
        })
      requestList.push(request)
    })

    // 等待所有字典请求完成，执行回调
    await Promise.all(requestList)
    completeCallback && completeCallback()
  }
}
    